/*
16. 带重复元素的排列
给出一个具有重复数字的列表，找出列表所有不同的排列。

样例
给出列表 [1,2,2]，不同的排列有：

[
  [1,2,2],
  [2,1,2],
  [2,2,1]
]
挑战
使用递归和非递归分别完成该题。
*/

/*
依然使用C++，algorithm库，unique去重
*/
class Solution {
public:
    /*
     * @param :  A list of integers
     * @return: A list of unique permutations
     */
    vector<vector<int>> permuteUnique(vector<int> &nums) {
        // write your code here
        vector<vector<int>> result;
        sort(begin(nums), end(nums));
        do
        {
            result.emplace_back(nums);
        }while(next_permutation(begin(nums), end(nums)));
        auto iter = unique(begin(result), end(result));
        result.erase(iter, end(result));
        return result;
    }
};